package br.com.ff.cliente.entidade;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.ff.cliente.to.ClienteTO;
import br.com.ff.common.StatusEnum;

@Entity
@Table(name="cliente")
public class Cliente implements Serializable {
 
	private static final long serialVersionUID = 4337350454055191817L;

	@Id
	@Column(name="CLI_ID")
	private Long id;
	
	@Column(name="CLI_NOME")
	private String nome;
	 
	@Column(name="CLI_DESC")
	private String descricao;
	 
	@Column(name="CLI_PES")
	private Character fisicoJuridico;
	 
	@Column(name="CLI_ST")
	private Integer status;
	 
	@Column(name="CLI_DT")
	@Temporal(TemporalType.DATE)
	private Date dataCadastro;
	 
//	private Contato contato;
//	 
//	private List<Usuario> usuarios;
//	 
//	private List veiculos;
	
	public Cliente() {}
	
	public Cliente(ClienteTO clienteTO) {
		this.id = clienteTO.getId();
		this.dataCadastro = clienteTO.getDataCadastro();
		this.descricao = clienteTO.getDescricao();
		this.fisicoJuridico = clienteTO.getFisicoJuridico();
		this.nome = clienteTO.getNome();
		this.status = clienteTO.getStatus().getStatus();
	}

	public ClienteTO parseClienteTO() {
		ClienteTO clienteTO = new ClienteTO();
		clienteTO.setId(this.id);
		clienteTO.setDataCadastro(this.dataCadastro);
		clienteTO.setDescricao(this.descricao);
		clienteTO.setFisicoJuridico(this.fisicoJuridico);
		clienteTO.setNome(this.nome);
		if (getStatus() == StatusEnum.ATIVO.getStatus()) {
			clienteTO.setStatus(StatusEnum.ATIVO);
		} else {
			clienteTO.setStatus(StatusEnum.INATIVO);
		}
		return clienteTO;
	}
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Character getFisicoJuridico() {
		return fisicoJuridico;
	}

	public void setFisicoJuridico(Character fisicoJuridico) {
		this.fisicoJuridico = fisicoJuridico;
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((dataCadastro == null) ? 0 : dataCadastro.hashCode());
		result = prime * result
				+ ((descricao == null) ? 0 : descricao.hashCode());
		result = prime * result
				+ ((fisicoJuridico == null) ? 0 : fisicoJuridico.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result + ((status == null) ? 0 : status.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Cliente other = (Cliente) obj;
		if (dataCadastro == null) {
			if (other.dataCadastro != null)
				return false;
		} else if (!dataCadastro.equals(other.dataCadastro))
			return false;
		if (descricao == null) {
			if (other.descricao != null)
				return false;
		} else if (!descricao.equals(other.descricao))
			return false;
		if (fisicoJuridico == null) {
			if (other.fisicoJuridico != null)
				return false;
		} else if (!fisicoJuridico.equals(other.fisicoJuridico))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (status == null) {
			if (other.status != null)
				return false;
		} else if (!status.equals(other.status))
			return false;
		return true;
	}

//	public Contato getContato() {
//		return contato;
//	}
//
//	public void setContato(Contato contato) {
//		this.contato = contato;
//	}
//
//	public List<Usuario> getUsuarios() {
//		return usuarios;
//	}
//
//	public void setUsuarios(List<Usuario> usuarios) {
//		this.usuarios = usuarios;
//	}
//
//	public List getVeiculos() {
//		return veiculos;
//	}
//
//	public void setVeiculos(List veiculos) {
//		this.veiculos = veiculos;
//	}


	
}
 
